package com.zhiche.lisa.lspm.service.carrier.impl;


import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zhiche.lisa.lspm.dao.mapper.carrier.CarrierTrailerBindMapper;
import com.zhiche.lisa.lspm.dao.model.carrier.CarrierTrailerBind;
import com.zhiche.lisa.lspm.dao.model.carrier.CarrierTrailerBindLog;
import com.zhiche.lisa.lspm.service.carrier.ICarrierTrailerBindLogService;
import com.zhiche.lisa.lspm.service.carrier.ICarrierTrailerBindService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * <p>
 * 车头与挂车绑定关系 服务实现类
 * </p>
 *
 * @author qichao
 * @since 2018-06-27
 */
@Service
public class CarrierTrailerBindServiceImpl extends ServiceImpl<CarrierTrailerBindMapper, CarrierTrailerBind> implements ICarrierTrailerBindService {

    @Autowired
    private ICarrierTrailerBindLogService carrierTrailerBindLogService;

    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean bindCarrierTrailer(Long carrierId, Long trailerId, Long tenantId) {
        unbindCarrierTrailer(carrierId, trailerId); //先解绑

        CarrierTrailerBind carrierTrailerBind = new CarrierTrailerBind();
        carrierTrailerBind.setCarrierId(carrierId);
        carrierTrailerBind.setTrailerId(trailerId);
        carrierTrailerBind.setTenantId(tenantId);
//        carrierTrailerBind.setCreator(AccountUtil.getLoginAccountName());
//        carrierTrailerBind.setCreator();

        CarrierTrailerBindLog carrierTrailerBindLog = new CarrierTrailerBindLog();
        BeanUtils.copyProperties(carrierTrailerBind, carrierTrailerBindLog);
        carrierTrailerBindLog.setTenantId(tenantId);
        return this.insert(carrierTrailerBind) && carrierTrailerBindLogService.insert(carrierTrailerBindLog);
    }

    @Override
    public boolean unbindCarrierTrailer(Long carrierId, Long trailerId) {
        Wrapper<CarrierTrailerBind> ew = new EntityWrapper<>();
        ew.eq("carrier_id", carrierId).or().eq("trailer_id", trailerId);
        return this.delete(ew);
    }

    @Override
    public CarrierTrailerBind getCarrierTrailerBindByTrailIdNoCId(Long trailerId, Long carrierId) {
        CarrierTrailerBind carrierTrailerBind = null;
        EntityWrapper<CarrierTrailerBind> ew = new EntityWrapper<>();
        ew.eq("trailer_id", trailerId).ne("carrier_id", carrierId);
        List<CarrierTrailerBind> list = this.selectList(ew);
        if (CollectionUtils.isNotEmpty(list)) {
            carrierTrailerBind = list.get(0);
        }
        return carrierTrailerBind;
    }

    @Override
    public CarrierTrailerBind getCarrierTrailerBindByTIdAndCId(Long trailerId, Long carrierId) {
        CarrierTrailerBind carrierTrailerBind = null;
        EntityWrapper<CarrierTrailerBind> ew = new EntityWrapper<>();
        ew.eq("trailer_id", trailerId).eq("carrier_id", carrierId);
        List<CarrierTrailerBind> list = this.selectList(ew);
        if (CollectionUtils.isNotEmpty(list)) {
            carrierTrailerBind = list.get(0);
        }
        return carrierTrailerBind;
    }
}
